package utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库访问操作接口
 */
public interface IDataUtil {
    /**
     * 该方法提供数据库Connection,Statement,ResultSet等操作资源的关闭
     * @return void
     */
    public void close(Connection conn, Statement stmt, ResultSet rs);
    public void close(Connection conn, Statement stmt);
    /**
     * 提供数据库表记录的插入操作
     * @param sql 提供表记录插入的用户insert into 的SQL语句
     * @param para 当SQL中有？参数是，para数组提供对应参数的所有值
     * @return int 当主键不是自动编号时，成功返回>0,失败为0
     */
    public int insert(String sql,Object[] para);

    /**
     * 提供数据库表记录的更新操作
     * @param sql 提供表记录插入的用户update set 的SQL语句
     * @param para 当SQL中有？参数是，para数组提供对应参数的所有值
     * @return int 成功返回>0,失败为0
     */
    public int update(String sql,Object[] para);


    /**
     * 提供数据库表记录的删除操作
     * @param sql 提供表记录删除的用户delete from 的SQL语句
     * @param para 当SQL中有？参数是，para数组提供对应参数的所有值
     * @return int 成功返回>0,失败为0
     */
    public int delete(String sql,Object[] para);


    /**
     * 提供数据库表记录的查看操作
     * @param sql 提供表记录查看的用户select from 的SQL语句
     * @param para 当SQL中有？参数是，para数组提供对应参数的所有值
     * @return ResultSet 调用后需调用接口的close()方法关闭资源
     */
    public ResultSet select(String sql, Object[] para);

    /**
     * 提供调用存储过程的数据库操作，该方法仅提供执行返回select的存储过程
     * @param proName 存储过程的名称
     * @param para 当存储过程中有？参数是，para数组提供对应参数的所有值
     * @return ResultSet
     */
    public ResultSet callProcedureWithQuery(String proName,Object[] para);

    /**
     * 返回查询表中的字段数量
     */
    public int fieldNum(String sql);

    /**
     * 返回查询表中的字段的行数，就是有多少条数据
     */
    public int lineNum(ResultSet rs) throws SQLException;
}

